home *** CD-ROM | disk | FTP | other *** search
Lisp/Scheme | 1994-06-25 | 2.2 KB | 92 lines | [TEXT/xlsp] |
- ; turtle.lsp for MacXLisp 2.1g by Brian Kendig.
- ;
- ; A set of turtle graphics primitives (a la Logo)
- ; to demonstrate XLisp's drawing routines.
- ;
- ; Originally by Peter Ashwood-Smith. Bugs fixed by Tom Almy.
- ; Rewritten for MacXLisp by Brian Kendig.
-
- (defun pause (secs)
- (let ((finish (+ (get-internal-run-time)
- (* secs internal-time-units-per-second))))
- (loop (when (> (get-internal-run-time) finish)
- (return-from pause)))))
-
- ; Primitives
-
- (defun TurtleGraphicsUp nil
- (setq CenterX 100 CenterY 100)
- (showgraphics)
- (cleargraphics)
- (TurtleCenter))
-
- (defun TurtleGraphicsDown nil
- (hidegraphics))
-
- (defun TurtleCenter nil
- (moveto CenterX CenterY)
- (setq Heading 0))
-
- (defun TurtleGoto (x y)
- (moveto x y))
-
- (defun TurtleRight (deg)
- (setq Heading (- Heading (* deg 0.01745329))))
-
- (defun TurtleLeft (deg)
- (setq Heading (+ Heading (* deg 0.01745329))))
-
- (defun TurtleForward (dist)
- (draw (truncate (* (cos Heading) dist))
- (truncate (* (sin Heading) dist))))
-
- (defun PenDown nil (showpen))
- (defun PenUp nil (hidepen))
-
- ; Demonstrations
-
- (defun Line_T (size)
- (TurtleForward size) (TurtleRight 180)
- (TurtleForward (/ size 4)))
-
- (defun Square (size)
- (TurtleForward size) (TurtleRight 90)
- (TurtleForward size) (TurtleRight 90)
- (TurtleForward size) (TurtleRight 90)
- (TurtleForward size))
-
- (defun Triangle (size)
- (TurtleForward size) (TurtleRight 120)
- (TurtleForward size) (TurtleRight 120)
- (TurtleForward size))
-
- (defun Make (ObjectFunc Size star skew)
- (dotimes (dummy star)
- (apply ObjectFunc (list Size))
- (TurtleRight skew)))
-
- (defun GraphicsDemo nil
- (TurtleGraphicsUp)
- (color 65535 0 0)
- (Make #'Square 40 18 5) (Make #'Square 60 30 5)
- (pause 3)
- (TurtleGraphicsUp)
- (color 0 65535 0) (Make #'Triangle 60 30 5)
- (color 50000 0 0) (Make #'Triangle 40 30 5)
- (pause 3)
- (TurtleGraphicsUp)
- (color 0 0 65535)
- (Make #'Line_T 80 50 10)
- (pause 3)
- (TurtleGraphicsUp)
- (setq red 60000 green 0 blue 30000 step 2000)
- (dotimes (dummy 60)
- (color red green blue)
- (Square 60) (TurtleRight 5)
- (setq red (- red step)
- blue (+ blue step))))
-
- (print "Try (GraphicsDemo)")
-
- (setq *features* (cons :turtle *features*))
-